📚 GUÍA COMPLETA - PRÁCTICA EXAMEN UNIDAD 1

Sistema de Biblioteca con Django + MySQL + GitHub + PythonAnywhere

Profesor: Bernardo Prado

Cuatrimestre: 2026-1

Universidad: Universidad Tecnológica de Hermosillo (UTH)

Asignatura: Aplicaciones Web Orientadas a Servicios

📹 REQUISITOS DEL VIDEO DE PRESENTACIÓN (EVIDENCIA)

⏱️ Duración:

No hay tiempo máximo. Los minutos que sean necesarios, no debe incluirse los errores en la grabación. En cuanto haya alguno debén detener la grabación y ver como fue la corrección paso a paso, también incluirla en el video.

Y solo debe ser un SOLO video no varios, Entonces si deben pegar varios videos, deberán hacerlo para que su examen tenga validez para ser revisado con todos los requerimientos solicitados. Lo que su conocimiento no llegue a saber, deberan aprender a hacerlo. Como hacerlo, Hay muchos recursos de apredizaje en internet. Para Lograrlo.

Solo debe escucharse la voz del alumno, durante el video, no la de otra persona mas, por ello debe el alumno prepararse antes de iniciar la grabación. Y durante este proceso debe verse esta Guia de apoyo, para que vayan diciendo lo que se va solicitando, todo esto es requisito para tener derecho a la evaluación.

Durante la grabación No se debe ver la utilizacion de la IA(inteligencia Artificial) una vez se detecte un error, se detiene el video y se resuleve con (IA) si asi lo eligen, despues se reinicia video, se explica que ocurrio, y se muestra lo que se realizo apoyado con la IA y las partes de codigo que cambio.

👤 Presentador:

Tu rostro DEBE ser visible al inicio y durante todo el video dando explicación. Ubicación: Esquina inferior izquierda. Un Rectangulo de 1/6 de tamaño tanto en Fila y Columna

  • Utiliza software de grabación de pantalla con cámara (OBS Studio, Loom, Zoom, etc.)
  • Asegúrate de que tu rostro sea visible constantemente
  • Habla claro y pausado durante toda la demostración, se escuche con buen volumen y claridad
  • Se debe escribir cada linea de comando de manera individual y explicar que ejecuta tal y como lo ofrece esta guia
  • En caso de no cumplir con algun requerimiento antes mencionado se deberá realizar de nuevo toda la grabación, no sera aceptada a medias, todo debe estar según lo estipulado
🎬 Demostración:

Debe mostrar el funcionamiento completo del CRUD y el sistema de autenticación.

  • Crear (Create): Agregar nuevos libros, autores, categorías desde el admin
  • Leer (Read): Navegar por las listas, ver detalles de libros y autores
  • Actualizar (Update): Editar información de libros existentes
  • Eliminar (Delete): Demostrar eliminación de registros
  • Autenticación: Mostrar login/logout del panel de administración
  • Navegación: Probar todas las páginas principales
  • Búsquedas y Filtros: Demostrar funcionalidad de búsqueda
📤 Entrega:

Subir a Google Drive (con permisos de visualización pública) y adjuntar el enlace. Sin restricciones.

  • Sube el video a Google Drive
  • Clic derecho en el archivo → Obtener enlace
  • Cambiar permisos a "Cualquier persona con el enlace puede ver"
  • Copiar el enlace de la práctica y enviarlo a el Email de la Asignatura
  • Enviarlo al Email: Tenor_Prado@yahoo.com.mx
  • Escribiendo en Asunto: Apellido Paterno Apellido Materno Nombres Grupo Examen Práctica U1
  • ejemplo: Prado Diaz Bernardo DSM5-1 Examen Práctica U1
  • en el cuerpo del Email: Lo mismo Prado Diaz Bernardo DSM5-1 Examen Práctica U1 y el enlace de Google DRIVE listo para ver video

⚠️ IMPORTANTE

  • El video ES OBLIGATORIO para la evaluación completa
  • Debes aparecer TÚ en el video, no solo tu voz
  • Muestra tu rostro desde el inicio explicando qué vas a demostrar
  • Demuestra que el sistema funciona en PythonAnywhere (producción)
  • NO uses videos pregrabados de terceros

🎯 OBJETIVOS DE APRENDIZAJE

Al completar esta práctica, el estudiante será capaz de:

  • ✅ Instalar y configurar un entorno de desarrollo Python con Django
  • ✅ Crear y estructurar un proyecto Django siguiendo mejores prácticas
  • ✅ Conectar Django con una base de datos MySQL
  • ✅ Diseñar modelos de datos y realizar migraciones
  • ✅ Implementar vistas basadas en funciones y clases
  • ✅ Crear templates con el sistema de plantillas de Django
  • ✅ Utilizar Git y GitHub para control de versiones
  • ✅ Desplegar una aplicación Django en PythonAnywhere

💻 REQUISITOS PREVIOS

Software Necesario:

  • Python 3.10+ o superior
  • MySQL Server 8.0+ o superior
  • Git
  • VS Code (editor recomendado)
  • Navegador web moderno

Cuentas Requeridas:

📦 PARTE 1: CONFIGURACIÓN DEL ENTORNO

Paso 1.1: Verificar Instalación de Python

# Abrir PowerShell como Administrador

# Verificar versión de Python
python --version
# Salida esperada: Python 3.10.x o superior

# Verificar pip
pip --version

Paso 1.2: Crear Directorio del Proyecto

# Crear carpeta para el proyecto
mkdir D:\Proyectos\biblioteca_django
cd D:\Proyectos\biblioteca_django

Paso 1.3: Crear Entorno Virtual

# Crear entorno virtual
python -m venv venv

# Activar el entorno virtual (Windows)
.\venv\Scripts\Activate

# Verificar activación (debe aparecer (venv) al inicio del prompt)
💡 Nota: Siempre trabaja con el entorno virtual activado. Si cierras la terminal, deberás activarlo nuevamente con .\venv\Scripts\Activate

Paso 1.4: Instalar Django y Dependencias

# Actualizar pip
python -m pip install --upgrade pip

# Instalar Django
pip install Django==4.2

# Instalar conector MySQL
pip install mysqlclient

# Instalar otras dependencias
pip install pillow

# Crear archivo requirements.txt
pip freeze > requirements.txt

🏗️ PARTE 2: CREACIÓN DEL PROYECTO DJANGO

Paso 2.1: Crear Proyecto Django

# Crear proyecto
django-admin startproject biblioteca_project .

# Verificar estructura creada
dir

Paso 2.2: Crear Aplicación "libros"

# Crear aplicación
python manage.py startapp libros

Paso 2.3: Registrar la Aplicación

Editar biblioteca_project/settings.py:

# Localizar INSTALLED_APPS y agregar 'libros'

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'libros',  # ← AGREGAR ESTA LÍNEA
]

🗄️ PARTE 3: CONFIGURACIÓN DE MYSQL

Paso 3.1: Crear Base de Datos en MySQL

-- Abrir MySQL Workbench o línea de comandos MySQL

-- Crear base de datos
CREATE DATABASE biblioteca_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Crear usuario y otorgar privilegios
CREATE USER 'biblioteca_user'@'localhost' IDENTIFIED BY 'Pass123456!';
GRANT ALL PRIVILEGES ON biblioteca_db.* TO 'biblioteca_user'@'localhost';
FLUSH PRIVILEGES;

-- Verificar creación
SHOW DATABASES;
SELECT user FROM mysql.user WHERE user='biblioteca_user';

Paso 3.2: Configurar Archivo .env

Crear archivo .env en la raíz del proyecto donde esta ubicado el archivo manage.py:

# Configuración de Base de Datos
DB_NAME=biblioteca_db
DB_USER=biblioteca_user
DB_PASSWORD=Pass123456!
DB_HOST=localhost
DB_PORT=3306

# Configuración de Django
SECRET_KEY=django-insecure-tu-clave-secreta-aqui-cambiar-en-produccion # esta clave se encuentra en el archivo settings.py
DEBUG=True

Paso 3.3: Configurar settings.py para MySQL

Editar biblioteca_project/settings.py:

                    
import os
from pathlib import Path
import environ # Asegúrate de tener esto

# 1. Definir la ruta base del proyecto
BASE_DIR = Path(__file__).resolve().parent.parent

# 2. Inicializar environ y asignarlo a la variable 'config' 
# (Aquí es donde ocurre la magia: llamamos 'config' al objeto env)
config = environ.Env()

# 3. Leer el archivo .env
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))

# --- Ahora tus líneas siguientes funcionarán ---
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)

# ... más abajo en el archivo, reemplazar DATABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': config('DB_NAME'),
        'USER': config('DB_USER'),
        'PASSWORD': config('DB_PASSWORD'),
        'HOST': config('DB_HOST', default='localhost'),
        'PORT': config('DB_PORT', default='3306'),
        'OPTIONS': {
            'charset': 'utf8mb4',
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

# Configuración de idioma y zona horaria
LANGUAGE_CODE = 'es-mx'
TIME_ZONE = 'America/Mexico_City'
USE_I18N = True
USE_TZ = True

# Instala la librería: Ejecuta el siguiente comando para instalar el paquete necesario:
pip install django-environ

#Verifica la instalación: Para estar seguro de que ahora sí existe en tu entorno, puedes listar los paquetes instalados:
pip list

# Tip adicional: Si tienes un archivo llamado requirements.txt en tu proyecto, lo ideal es ejecutar:
pip install -r requirements.txt


Paso 3.4: Verificar Conexión

# Probar conexión a la base de datos
python manage.py check
# Salida esperada: System check identified no issues (0 silenced).

📊 PARTE 4: MODELOS Y BASE DE DATOS

Modelos a Crear

Crear los siguientes modelos en libros/models.py:

  • Autor: nombre, fecha_nacimiento, pais_origen, biografia, foto
  • Categoría: nombre, descripcion, activa
  • Editorial: nombre, pais, sitio_web, email
  • Libro: isbn, titulo, autor (FK), categorias (M2M), editorial (FK), fecha_publicacion, numero_paginas, sinopsis, portada, precio, stock, estado, calificacion
  • Préstamo: libro (FK), nombre_usuario, email_usuario, fechas, estado

Codigo: Django para la Creacion de tablas en MySQL


Para implementar estos modelos en Django, utilizaremos campos específicos para cada tipo de dato 
(fechas, correos, imágenes, etc.) y definiremos las relaciones necesarias como ForeignKey (FK) 
y ManyToManyField (M2M).

Aquí tienes el código para libros/models.py:

*** Codigo Python *****

from django.db import models

class Autor(models.Model):
    nombre = models.CharField(max_length=150)
    fecha_nacimiento = models.DateField()
    pais_origen = models.CharField(max_length=100)
    biografia = models.TextField()
    foto = models.ImageField(upload_to='autores/', null=True, blank=True)

    def __str__(self):
        return self.nombre

class Categoria(models.Model):
    nombre = models.CharField(max_length=100)
    descripcion = models.TextField()
    activa = models.BooleanField(default=True)

    def __str__(self):
        return self.nombre

class Editorial(models.Model):
    nombre = models.CharField(max_length=150)
    pais = models.CharField(max_length=100)
    sitio_web = models.URLField(null=True, blank=True)
    email = models.EmailField()

    def __str__(self):
        return self.nombre

class Libro(models.Model):
    ESTADO_CHOICES = [
        ('disponible', 'Disponible'),
        ('prestado', 'Prestado'),
        ('mantenimiento', 'En Mantenimiento'),
    ]
    
    isbn = models.CharField(max_length=13, unique=True)
    titulo = models.CharField(max_length=255)
    autor = models.ForeignKey(Autor, on_delete=models.CASCADE)
    categorias = models.ManyToManyField(Categoria)
    editorial = models.ForeignKey(Editorial, on_delete=models.SET_NULL, null=True)
    fecha_publicacion = models.DateField()
    numero_paginas = models.PositiveIntegerField()
    sinopsis = models.TextField()
    portada = models.ImageField(upload_to='portadas/', null=True, blank=True)
    precio = models.DecimalField(max_digits=10, decimal_places=2)
    stock = models.PositiveIntegerField(default=0)
    estado = models.CharField(max_length=20, choices=ESTADO_CHOICES, default='disponible')
    calificacion = models.FloatField(default=0.0)

    def __str__(self):
        return self.titulo

class Prestamo(models.Model):
    ESTADO_PRESTAMO = [
        ('activo', 'Activo'),
        ('devuelto', 'Devuelto'),
        ('retrasado', 'Retrasado'),
    ]
    
    libro = models.ForeignKey(Libro, on_delete=models.CASCADE)
    nombre_usuario = models.CharField(max_length=150)
    email_usuario = models.EmailField()
    fecha_prestamo = models.DateTimeField(auto_now_add=True)
    fecha_devolucion_esperada = models.DateField()
    estado = models.CharField(max_length=15, choices=ESTADO_PRESTAMO, default='activo')

    def __str__(self):
        return f"{self.libro.titulo} - {self.nombre_usuario}"

**** Detalles importantes que agregué: *****
on_delete: Es obligatorio en Django para las ForeignKey. Usé CASCADE para que si borras un autor, 
se borren sus libros, y SET_NULL para la editorial para que el libro no desaparezca si la editorial 
es eliminada.

upload_to: Define las carpetas donde se guardarán las fotos 
(necesitarás instalar la librería Pillow con pip install Pillow).

choices: Para los campos "estado", es mejor usar una lista de opciones para evitar errores de escritura.

DecimalField: Para el precio, siempre es mejor usar este campo que un Float para evitar problemas de 
precisión monetaria.

Siguientes pasos:
Asegúrate de tener instalado Pillow (pip install Pillow) para manejar las imágenes.

Ejecuta las migraciones para crear las tablas en la base de datos.

                

Paso 4.2: Crear Migraciones

# Crear archivos de migración
python manage.py makemigrations

Paso 4.3: Aplicar Migraciones

# Aplicar migraciones a la base de datos
python manage.py migrate

Paso 4.4: Crear Superusuario

# Crear superusuario para acceder al admin
python manage.py createsuperuser

# Ingresar datos solicitados:
# Username: admin
# Email: admin@biblioteca.com
# Password: Admin123456!
# Password (again): Admin123456!
✅ Checkpoint: Inicia el servidor con python manage.py runserver y accede a http://127.0.0.1:8000/admin/ para verificar que el admin funciona.

🎨 PARTE 5: VISTAS Y URLS

Vistas a Implementar

Vista URL Descripción
inicio / Página principal con estadísticas
lista_libros /libros/ Listado de todos los libros
detalle_libro /libro/<id>/ Detalles de un libro específico
lista_autores /autores/ Listado de autores
detalle_autor /autor/<id>/ Detalles de un autor
busqueda_avanzada /busqueda/ Búsqueda con filtros
estadisticas /estadisticas/ Dashboard con métricas
💡 Importante: Revisar este Link CODIGO BUSCADO para el código completo de las vistas y configuración de URLs.

📱 PARTE 6: TEMPLATES

Estructura de Templates

(Esta carpeta llamada templates debe estar dentro de la carpeta biblioteca_django y dentro de ella estan las carpetas base y libros)
templates/
├── base/
│   └── base.html          # Template base con navbar y footer
└── libros/
    ├── inicio.html         # Página de inicio
    ├── lista_libros.html   # Lista de libros
    ├── detalle_libro.html  # Detalle de libro
    ├── lista_autores.html  # Lista de autores
    └── detalle_autor.html  # Detalle de autor

Archivos Estáticos

(Esta carpeta llamada static debe estar dentro de la carpeta biblioteca_django y dentro de ella estan las carpetas css, js e images)
static/
├── css/
│   └── styles.css         # Estilos personalizados
├── js/
│   └── main.js            # JavaScript personalizado
└── images/                # Imágenes del sitio
💡 Importante: Revisar este Link CODIGO BUSCADO para el código completo de los Templates y Archivos Estáticos.
✅ Tecnologías Frontend:
  • Bootstrap 5 (para diseño responsive)
  • Font Awesome (para iconos)
  • CSS personalizado
  • JavaScript para interactividad

📂 PARTE 7: CONTROL DE VERSIONES CON GITHUB

Paso 7.1: Configurar Git Localmente

# Configurar nombre de usuario
git config --global user.name "Tu Nombre"

# Configurar email
git config --global user.email "tu.email@ejemplo.com"

# Verificar configuración
git config --list

Paso 7.2: Crear .gitignore

Crear archivo .gitignore:

# Python
*.py[cod]
__pycache__/
*.pyc

# Django
*.log
db.sqlite3
/media
/staticfiles

# Entorno virtual
venv/
env/

# Variables de entorno
.env

# IDEs
.vscode/
.idea/

Paso 7.3: Inicializar Repositorio Git

# Inicializar git
git init

# Agregar todos los archivos
git add .

# Crear primer commit
git commit -m "Initial commit: Proyecto Biblioteca Django con MySQL"

Paso 7.4: Crear Repositorio en GitHub

  1. Ir a GitHub.com
  2. Iniciar sesión con tu cuenta
  3. Crear nuevo repositorio:
    • Clic en "+" → "New repository"
    • Nombre: biblioteca-django-uth
    • Descripción: "Sistema de Biblioteca con Django y MySQL - Práctica Unidad 1"
    • Público o Privado
    • NO inicializar con README, .gitignore o licencia
    • Clic en "Create repository"

Paso 7.5: Conectar Repositorio Local con GitHub

# Agregar remote origin (reemplazar USERNAME con tu usuario)
git remote add origin https://github.com/USERNAME/biblioteca-django-uth.git

# Verificar remote
git remote -v

# Subir código a GitHub
git branch -M main
git push -u origin main

Paso 7.6: Crear README.md

Crear un archivo README.md con:

  • Descripción del proyecto
  • Tecnologías utilizadas
  • Instrucciones de instalación
  • Estructura del proyecto
  • Información del autor
⚠️ IMPORTANTE: El archivo .env NUNCA debe subirse a GitHub. Asegúrate de que esté en .gitignore.

☁️ PARTE 8: DESPLIEGUE EN PYTHONANYWHERE

Paso 8.1: Crear Cuenta

  1. Ir a PythonAnywhere.com
  2. Seleccionar plan "Beginner (Free)"
  3. Crear cuenta y verificar email

Paso 8.2: Configurar MySQL en PythonAnywhere

  1. En Dashboard, ir a "Databases"
  2. Crear database: biblioteca_db
  3. Anotar: database name, username, password, host

Paso 8.3: Clonar Repositorio

# En Bash console de PythonAnywhere
git clone https://github.com/USERNAME/biblioteca-django-uth.git
cd biblioteca-django-uth

Paso 8.4: Crear Entorno Virtual

# Crear entorno virtual
mkvirtualenv --python=/usr/bin/python3.10 biblioteca_env

# Instalar dependencias
pip install -r requirements.txt

Paso 8.5: Configurar Variables de Entorno

Crear .env con valores de producción:

DB_NAME=USERNAME
DB_USER=USERNAME
DB_PASSWORD=tu_password_mysql
DB_HOST=USERNAME.mysql.pythonanywhere-services.com
DB_PORT=3306
SECRET_KEY=nueva-clave-secreta-para-produccion
DEBUG=False
ALLOWED_HOSTS=USERNAME.pythonanywhere.com

Paso 8.6: Ejecutar Migraciones

python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic --noinput

Paso 8.7: Configurar Web App

  1. Ir a "Web" en Dashboard
  2. "Add a new web app"
  3. Seleccionar "Manual configuration"
  4. Python 3.10
  5. Configurar WSGI file
  6. Configurar Virtualenv
  7. Configurar Static files
  8. Recargar aplicación

✅ Aplicación Desplegada

Tu aplicación estará disponible en: https://USERNAME.pythonanywhere.com

📊 RÚBRICA DE EVALUACIÓN Y ESPECIFICACIONES

Total: 100 puntos, para el puntaje. Ya en la Calificación se dividira entre 10

Criterio Descripción Puntos
1. CONFIGURACIÓN DEL ENTORNO (10 pts)
1.1 Instalación correcta Python, Django y MySQL instalados correctamente 3
1.2 Entorno virtual Creación y activación de entorno virtual 3
1.3 Dependencias requirements.txt completo y funcional 2
1.4 Variables de entorno Archivo .env configurado correctamente 2
2. PROYECTO DJANGO (15 pts)
2.1 Creación del proyecto Proyecto Django creado correctamente 3
2.2 Estructura Directorios organizados adecuadamente 3
2.3 Configuración settings.py configurado apropiadamente 4
2.4 Separación por entornos Configuración distingue desarrollo/producción 3
2.5 Seguridad SECRET_KEY y DEBUG manejados correctamente 2
3. BASE DE DATOS MYSQL (15 pts)
3.1 Creación de BD Base de datos MySQL creada 3
3.2 Conexión Django conectado correctamente a MySQL 4
3.3 Usuario y privilegios Usuario con permisos adecuados 3
3.4 Charset UTF-8 Configuración de codificación correcta 2
3.5 Pruebas Conexión verificada exitosamente 3
4. MODELOS DE DATOS (15 pts)
4.1 Modelo Autor Con todos los campos requeridos 3
4.2 Modelo Libro Con relaciones ForeignKey y ManyToMany 4
4.3 Categoría y Editorial Modelos implementados correctamente 3
4.4 Modelo Préstamo Implementado con campos necesarios 2
4.5 Métodos __str__ y properties implementados 1
4.6 Migraciones Creadas y aplicadas exitosamente 2
5. VISTAS Y URLS (10 pts)
5.1 Vista inicio Página de inicio funcional 2
5.2 Vistas de lista Lista de libros y autores funcionando 2
5.3 Vistas de detalle Detalles implementados correctamente 2
5.4 Búsqueda Sistema de búsqueda funcional 2
5.5 URLs Configuración correcta de rutas 2
6. TEMPLATES Y FRONTEND (10 pts)
6.1 Template base Herencia de templates implementada 2
6.2 Templates principales Lista y detalle creados 3
6.3 Diseño responsive Bootstrap 5 correctamente aplicado 2
6.4 CSS personalizado Estilos propios aplicados 2
6.5 JavaScript Interactividad básica implementada 1
7. PANEL DE ADMINISTRACIÓN (5 pts)
7.1 Modelos registrados Todos los modelos en admin 2
7.2 Personalización Admin personalizado (opcional) 2
7.3 Superusuario Creado y funcional 1
8. CONTROL DE VERSIONES (10 pts)
8.1 Repositorio Git Git inicializado correctamente 2
8.2 .gitignore Archivos sensibles excluidos 2
8.3 Commits Mensajes claros y organizados 3
8.4 GitHub Repositorio público/privado activo 2
8.5 README Documentación completa 1
9. DESPLIEGUE (10 pts)
9.1 PythonAnywhere Aplicación desplegada y accesible 4
9.2 BD en producción MySQL configurado en PythonAnywhere 2
9.3 Archivos estáticos CSS, JS e imágenes cargando 2
9.4 Configuración Producción correctamente configurada 2
10. DOCUMENTACIÓN Y BUENAS PRÁCTICAS (10 pts)
10.1 Código documentado Docstrings y comentarios 3
10.2 Nombres descriptivos Variables y funciones bien nombradas 2
10.3 Código limpio Estructura clara y organizada 2
10.4 Manejo de errores Try-except básicos implementados 2
10.5 README Instrucciones claras de instalación 1

Escala de Calificación

Puntos Calificación Nivel
9.5-10.0 ESTRATÉGICO E
8.50-9.49 AUTÓNOMO A
7.5-8.49 BÁSICO B
6.50-7.49 RECEPTIVO R
0-6.49 PREFORMAL NA

Puntos Extra (Opcional)

Criterio Puntos Extra
API REST con Django REST Framework +10
Sistema de autenticación de usuarios +8
Paginación en listas +5
Filtros avanzados +5
Pruebas unitarias (tests) +7
Diseño UI/UX excepcional +5

✅ LISTA DE VERIFICACIÓN FINAL

Antes de Entregar

  • Entorno virtual creado y funcionando
  • Base de datos MySQL configurada
  • Todos los modelos creados y migrados
  • Vistas funcionando correctamente
  • Templates renderizando bien
  • Archivos estáticos cargando (CSS, JS, imágenes)
  • Panel admin accesible y funcional
  • Repositorio Git con commits organizados
  • Código subido a GitHub
  • README.md completo y detallado
  • Aplicación desplegada en PythonAnywhere
  • URL de PythonAnywhere funcionando sin errores
  • Código documentado con docstrings
  • Sin errores 404 o 500
  • Formularios validando correctamente
  • Video de demostración grabado y subido

Entregables Requeridos

  1. URL de GitHub: https://github.com/USERNAME/biblioteca-django-uth
  2. URL de PythonAnywhere: https://USERNAME.pythonanywhere.com
  3. Credenciales de Admin: Enviar por mensaje privado al profesor
  4. Video de Demostración: Enlace de Google Drive con permisos públicos
  5. Documento PDF (opcional): Capturas de pantalla del proceso

🎓 CONCLUSIÓN

Al completar esta práctica habrás:

  • ✅ Desarrollado una aplicación web completa con Django
  • ✅ Implementado modelos de datos complejos con relaciones
  • ✅ Conectado Django con MySQL exitosamente
  • ✅ Creado un frontend responsive y atractivo
  • ✅ Utilizado Git y GitHub profesionalmente
  • ✅ Desplegado una aplicación en producción

📚 Recursos Adicionales

💡 Consejos Finales

  1. Guarda cambios frecuentemente con commits en Git
  2. Prueba cada funcionalidad antes de continuar con la siguiente
  3. Lee los mensajes de error con atención, te indican el problema
  4. Consulta la documentación oficial cuando tengas dudas
  5. Pide ayuda si te atascas más de 30 minutos en algo
  6. Documenta tu código para tu futuro yo y otros desarrolladores
  7. No copies y pegues sin entender - aprende cada línea de código
  8. Graba el video con tiempo - no lo dejes para el último momento

🚀 ¡Éxito en tu práctica!

Esta práctica es fundamental para comprender el desarrollo web con Django. Tómate tu tiempo, aprende cada concepto y disfruta el proceso de creación.

📅 Fechas de Entrega y Calificación - Examen U1

Tu calificación final dependerá del periodo en el que entregues tu proyecto. Cuanto antes completes y subas tu evidencia, mayor será tu evaluación.

🏆

E = ESTRATÉGICO

Calificación: 10

Del 13 al 17 de Enero 2026

Hora límite: 15:00 — Zona: America/Hermosillo

A = AUTÓNOMO

Calificación: 9.0

Del 17 Enero 15:01 al 18 de Enero 2026

Hora límite: 15:00 — Zona: America/Hermosillo
🔔

B = BÁSICO

Calificación: 8.0

Del 18 Enero 15:01 al 19 de Enero 2026

Hora límite: 15:00 — Zona: America/Hermosillo
⚠️

R = RECEPTIVO

Calificación: 7.0

Del 19 Enero 15:01 al 23 de Enero 2026

Hora límite: 15:00 — Zona: America/Hermosillo

NA = PREFORMAL

Calificación: 6.0

Después de las 15:01 del 23 de Enero 2026

Entrega expirada

📊 Progreso Estimado (Actualización en Tiempo Real)

Fase 1: 13-17 Enero, Hora límite: 15:00 Calificación: 10

Nivel ESTRATÉGICO - Entrega temprana con tiempo de sobra

Fase 2: 17-18 Enero, Hora límite: 15:00 Calificación: 9.0

Nivel AUTÓNOMO - Entrega en tiempo razonable

Fase 3: 18-19 Enero, Hora límite: 15:00 Calificación: 8.0

Nivel BÁSICO - Entrega próxima al límite

Fase 4: 19-23 Enero, Hora límite: 15:00 Calificación: 7.0

Nivel RECEPTIVO - Entrega en el límite final

Después del 23 Enero, Hora: 15:01 Calificación: 6.0

Nivel PREFORMAL - Entrega fuera de tiempo (o 0 si no entrega nada)

⚠️ Importante: El no entregar nada resultaría en 0 (Cero) para contabilizar su promedio. Cada error u omisión restará calificación.

⏱️ Tiempo Restante para Entrega Óptima

0
Días
0
Horas
0
Minutos
0
Segundos
🖨️ Imprimir Guía